使用KMS一键加密Kubernetes集群Secret

阿里云容器服务Kubernetes版(简称ACK)通过您指定的KMS主密钥,对Kubernetes集群Secret进行落盘加密,您只需一键配置即可实现对Kubernetes集群的安全保护。

使用场景

Kubernetes拥有强大的运维编排管理能力,依赖大量的跨产品、跨服务、跨模块调用所必须使用的机密信息,例如:密码、证书、凭据、访问密钥等。Kubernetes集群使用Secret模型存储和管理集群系统和集群中业务应用的敏感信息,并且通过内部的etcd集群进行保存,同时在etcd集群的副本中进行分布式复制存储。

例如:部署一个没有任何业务负载的Kubernetes集群,初始情况下有大约50个Secret。其中任何一个Secret的泄露,都可能对Kubernetes集群、业务系统,甚至是企业的运行产生不可估量的损失。因此您在享受Kubernetes为您带来的便利时,也需要对Kubernetes集群中托管的大量凭据进行必要的保护,防止来自各方面的安全威胁。

加密机制

在ACK Pro托管集群中,您可以使用在KMS中创建的用户主密钥(CMK)加密Kubernetes Secret,加密过程基于Kubernetes提供的KMS Encryption Provider机制,使用信封加密的方式对存储在etcd中的Kubernetes Secret密钥进行自动加密和解密。关于信封加密的详情,请参见使用KMS信封加密在本地加密和解密数据。Kubernetes Secret密钥加密和解密的过程如下:
  • 当一个业务密钥需要通过Kubernetes Secret API存储时,数据会首先被API Server生成的一个随机的数据密钥加密,然后该数据密钥会被指定的KMS用户主密钥(CMK)加密为一个密文密钥存储在etcd中。
  • 解密Kubernetes Secret密钥时,系统会首先调用KMS的解密API进行密文密钥的解密,然后使用解密后的明文密钥对Secret数据解密并最终返回给用户。

前提条件

  • 您需要为使用Kubernetes的账号授予AliyunCSManagedSecurityRole角色的权限。如果您使用的账号未授权,在创建Pro集群或修改已有Pro集群过程中开启Secret落盘加密时,系统会提示您进行安全系统角色授权。
  • 如果您使用RAM用户登录,请确保RAM用户具备AliyunKMSCryptoAdminAccess权限。具体操作,请参见为RAM用户授权
  • 请确保您已在KMS控制台创建用户主密钥(CMK)。具体操作,请参见创建密钥
    说明 仅支持Aliyun_AES_256类型的用户主密钥(CMK)。

在新创建的ACK Pro集群中开启Secret落盘加密

  1. 登录容器服务管理控制台

  2. 在左侧导航栏,单击集群
  3. 集群列表页面,单击页面右上角的集群模板

  4. 选择集群模板,选择Pro托管集群,然后单击创建
  5. ACK托管版页签找到Secret落盘加密,选中选择KMS密钥,在下拉列表中选择KMS密钥ID。
  6. 根据控制台提示完成其他参数设置。
    具体操作,请参见创建ACK Pro版集群

在已创建的ACK Pro集群中开启Secret落盘加密

  1. 集群列表页面,单击目标Pro集群名称。
  2. 单击基本信息页签,在基本信息区域中打开Secret落盘加密开关。
  3. Secret落盘加密对话框,在下拉列表中选择KMS密钥ID,然后单击确定
    当集群状态由更新中变为运行中时,说明该集群Secret落盘加密的特性已变更完成。

执行结果

如果您在操作审计控制台的事件查询页面获取到使用AliyunCSManagedSecurityRole系统角色的加密和解密操作事件,则说明该集群已成功开启Secret落盘加密特性,此时您可以通过操作审计控制台查看对KMS的所有调用记录。